package GuLi_Java;
/*
* 方法的参数传递：
*   1、 形参： 方法声明时，方法小括号内的参数
*   2、 实参： 调用方法时，实际传入的参数的值
*
* 2、规则：
*   1、形参是基本数据类型的，将实参的值传递给基本数据类型的变量， 将实参的引用类型的变量的值传递给形参的引用类型变量
* 2、 形参是引用数据类型的，
* */
public class TestArgsTransfer {
    public static void main(String[] args) {
        TestArgsTransfer tt = new TestArgsTransfer();
        int i = 10;
        int j = 5;
        tt.swap(i,j);
        System.out.println("i:" + i + "\tj:" + j); // 俩个方法的对象空间不一致，相当于把变量复制到了swap方法的新开空间，当执行完毕就自动销毁所以不变

        DataSwap ds = new DataSwap();
        tt.swap(ds);
        System.out.println("i:" + i + "\tj:" + j);

    }

    public void swap(int i, int j){
        int temp = 0;
        temp = i;
        i = j;
        j = temp;
    }

    public void swap(DataSwap ds){
        int temp = 0;
        temp = ds.i;
        ds.i = ds.j;
        ds.j = temp;
    }





}
class DataSwap{
    int i =5;
    int j = 10;
}

class Value{
    int i = 15;

}

class TestValue{
    public static void main(String[] args) {
        TestValue t = new TestValue();
        t.first();
    }

    public void first(){
        int i = 5;
        Value v = new Value();
        v.i = 25;
        second(v,i);
        System.out.println(v.i);

    }

    public void second(Value v, int i){
        i = 0;
        v.i = 20;
        Value val = new Value();
        v = val;
        System.out.println(v.i + " " + i);

    }
}

